/*
 * Copyright 2010 Katsunori Koyanagi
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */

package sweezy.anim.core
{

	public interface IAnimationManager
	{

		function createActionAnimation(animation:IAnimation, action:IAction, quePosition:uint):IAnimationDecorator;

		function createEasingAnimation(animation:IAnimation, easing:IEasing):IAnimationDecorator;

		function createEmptyAnimation(duration:uint):IAnimation;

		function createPaddingAnimation(animation:IAnimation, before:uint, after:uint):IAnimationDecorator;

		function createParallelAnimation(animations:Array):IAnimationGroup;

		function createPhisycalEasingAnimation(element:Object, easing:IPhisycalEasing, delay:uint):IPropertyAnimation;

		function createPropertyAnimation(element:Object, duration:uint, easing:IEasing, delay:uint):IPropertyAnimation;

		function createPropertyAnimationByProperties(element:Object, properties:Object):IPropertyAnimation;

		function createRepeatAnimation(animation:IAnimation, numRepeat:uint):IAnimationDecorator;

		function createReverseAnimation(animation:IAnimation):IAnimationDecorator;

		function createRoundTripAnimation(animation:IAnimation):IAnimationDecorator;

		function createScaledAnimation(animation:IAnimation, scale:Number):IAnimationDecorator;

		function createSerialAnimation(animations:Array):IAnimationGroup;

		function createSlicedAnimation(animation:IAnimation, startPosition:uint, sliceDuration:uint):IAnimationDecorator;

		function get defaultDuration():uint;

		function set defaultDuration(value:uint):void;

		function get defaultEasing():IEasing;

		function set defaultEasing(value:IEasing):void;

		function deregisterUpdaterByElementType(elementType:Class):void;

		function deregisterUpdaterByPrefix(prefix:String):void;

		function getRelatedAnimations(element:Object):Array;

		function getUpdaterByElement(element:Object):IUpdater;

		function getUpdaterByPrefix(prefix:String):IUpdater;

		function pauseRelatedAnimations(element:Object):void;

		function registerUpdaterByElementType(elementType:Class, updater:IUpdater):void;

		function registerUpdaterByPrefix(prefix:String, updater:IUpdater):void;

		function setTimer(timer:ITimer):void;

		function updateNow():void;
	}
}
